/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package erp.financeiro.servlets;

import erp.financeiro.DadosBancarios;
import erp.financeiro.Modulos;
import erp.financeiro.TipoPessoa;
import erp.financeiro.TipoTransacao;
import erp.financeiro.Transacao;
import erp.financeiro.dao.DadosBancariosDAO;
import erp.financeiro.dao.TransacaoDAO;
import java.io.*;
import java.net.URL;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;


/**
 *
 * @author Koji
 */
public class GerenciadorFinanceiro extends HttpServlet {


    protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String url = request.getParameter("url");
        
        URL inputXML = new URL(url);
        Transacao transacao = null;

        Element root = new Element("transacao");

        Element id = new Element("id");
        Element idDados = new Element("idDadosBancarios");

        try{
            InputStream inputStream = inputXML.openStream();

            SAXBuilder saxb = new SAXBuilder();

            Document d = saxb.build(inputStream);
            Element parametros = d.getRootElement();

            Element dadosBancarios = parametros.getChild("dadosBancarios");

            Element elementDadosBancarios = dadosBancarios.getChild("id");
            String idDadosBancarios = null;
            if(!elementDadosBancarios.getText().equals("")){
                idDadosBancarios = elementDadosBancarios.getText();
            } else {
                Element tipoPessoa = dadosBancarios.getChild("tipoPessoa");
                TipoPessoa tipo = null;
                if(tipoPessoa.getText().equalsIgnoreCase("PESSOA_FISICA")){
                    tipo = TipoPessoa.PESSOA_FISICA;
                } else if(tipoPessoa.getText().equalsIgnoreCase("PESSOA_JURIDICA")){
                    tipo = TipoPessoa.PESSOA_JURIDICA;
                }

                Element nome = dadosBancarios.getChild("nome");
                Element descricao = dadosBancarios.getChild("descricao");
                Element banco = dadosBancarios.getChild("banco");
                Element agencia = dadosBancarios.getChild("agencia");
                Element conta = dadosBancarios.getChild("conta");
                Element documento = dadosBancarios.getChild("documento");

                DadosBancarios dadosBancariosEntity = DadosBancariosDAO.cadastrar(tipo, nome.getText(), descricao.getText(),
                        banco.getText(), agencia.getText(), conta.getText(), documento.getText());

                idDadosBancarios = dadosBancariosEntity.getId().toString();
            }

            Element tipoTransacao = parametros.getChild("tipoTransacao");
            TipoTransacao tipo;
            if(tipoTransacao.getText().equalsIgnoreCase("PAGAMENTO")){
                tipo = TipoTransacao.PAGAMENTO;
            } else {
                tipo = TipoTransacao.RECEBIMENTO;
            }
            Element patrimonio = parametros.getChild("patrimonio");
            Boolean pat = null;
            if(patrimonio.getText().equalsIgnoreCase("true")){
                pat = Boolean.TRUE;
            } else if(patrimonio.getText().equalsIgnoreCase("false")){
                pat = Boolean.FALSE;
            }

            Element modulo = parametros.getChild("modulo");
            Modulos modulos = Modulos.FINANCEIRO;
            if(modulo.getText().equalsIgnoreCase("RH")){
                modulos = Modulos.RH;
            } else if(modulo.getText().equalsIgnoreCase("ESPORTIVO")){
                modulos = Modulos.ESPORTIVO;
            } else if(modulo.getText().equalsIgnoreCase("VENDAS")){
                modulos = Modulos.VENDAS;
            }

            Element descricao = parametros.getChild("descricao");
            Element dataVencimento = parametros.getChild("dataVencimento");
            Element valor = parametros.getChild("valor");
            Element valorMulta = parametros.getChild("valorMulta");

            transacao = TransacaoDAO.cadastrar(idDadosBancarios, tipo, pat, descricao.getText(),
                    dataVencimento.getText(), Double.valueOf(valor.getText()), Double.valueOf(valorMulta.getText()), modulos);

            root.setAttribute("status", "ok");

            id.addContent(transacao.getId().toString());
            root.addContent(id);

            idDados.addContent(transacao.getDadosBancarios().getId().toString());
            root.addContent(idDados);
        } catch (Exception ex) {
            root.setAttribute("status", "erro");
        }

        Document doc = new Document();
        doc.setRootElement(root);

        XMLOutputter xout = new XMLOutputter();
        OutputStream out = response.getOutputStream();
        xout.output(doc, out);
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

   
}
